Start by using Clipboard.SetText instead of SetDataObject - it shouldn't make any difference in this case, but it's a simpler way to do things.
Your code works: I tried it in a simple form in one of my apps:
private void button2_Click(object sender, EventArgs e)
{
tbPasteIntoMe.Focus();
Clipboard.SetText("Hello there!");
SendKeys.Send("^v");
}
And my textbox gets the string "Hello there!" without problems.
But...do remember that SendKeys always sends to the Active application - which is probably yours, not the one you want to paste into. This may have something to do with your problem...
But to be honest, you shouldn't use the clipboard unless the user has explicitly told you to - many users (including me) will get very, very annoyed if you overwrite what they have placed on the clipboard without asking them in advance.
You probably should find a better method for interprocess communications - using the clipboard is what I call a "brute force and ignorance" approach which generally means your whole design needs looking at.